package sge.DAO;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import sge.Datos.ModeloTabla;
import sge.Entidades.Evento;

public class EventoDAO implements ObjetoDAO {

    private final static Logger LOG = Logger.getLogger(UsuarioDAO.class.getName());

    public EventoDAO() {
    }

    public boolean crear(Evento evento) {
        String consulta = "INSERT INTO evento(id_evento, nombre, cupo, tipo, fecha_inicio, fecha_fin,"
                + " hora_inicio, hora_fin, tema, precio, expositor, pago_expositor, lugar, material, estado) "
                + "VALUES(NULL, '"
                + evento.getNombre() + "', '"
                + evento.getCupo() + "', '"
                + evento.getTipo() + "', '"
                + evento.getFecha_inicio() + "', '"
                + evento.getFecha_final() + "', '"
                + evento.getHora_inicio() + "', '"
                + evento.getHora_final() + "', '"
                + evento.getTema() + "', '"
                + evento.getPrecio() + "', '"
                + evento.getExpositor() + "', '"
                + evento.getPago_expositor() + "', '"
                + evento.getLugar() + "', '"
                + evento.getMaterial() + "', '"
                + evento.getEstado() + "');";


        boolean exito = CONEXION.ejecutarSQL(consulta) > 0;;
        if (exito) {
            evento.setIdEvento(CONEXION.obtenerUltimoIDGenerado());
        }
        return exito;

    }

    public boolean modificar(Evento evento) {
        String consulta = "UPDATE evento SET "
                + "id_evento='" + evento.getIdEvento()
                + "', nombre='" + evento.getNombre()
                + "', cupo='" + evento.getCupo()
                + "', estado='" + evento.getEstado() + "' WHERE "
                + "id_evento='" + evento.getIdEvento() + "';";


        boolean exito = CONEXION.ejecutarSQL(consulta) > 0;;
        return exito;
    }

    public boolean eliminar(Integer idEvento, int estado) {

        //String consulta = "DELETE FROM evento WHERE id_evento='" + idEvento + "';";
        String consulta = "UPDATE evento SET "
                + "estado='" + estado + "' "
                + "WHERE id_evento='" + idEvento + "';";

        boolean exito = CONEXION.ejecutarSQL(consulta) > 0;
        return exito;
    }

    public List<Evento> listar() {

        List<Evento> datos = new ArrayList<>();

        String consulta = "SELECT id_evento,nombre, precio  FROM evento";//for more data add data
        try {
            PreparedStatement ps = CONEXION.crearSentenciaPreparada(consulta);
            ResultSet rs = ps.executeQuery();
                Evento sel = new Evento();
                sel.setNombre("Seleccione");
                datos.add(sel);
            while (rs.next()) {
                Evento e = new Evento();
                e.setIdEvento(rs.getInt(1));
                e.setNombre(rs.getString(2));
                e.setPrecio(rs.getDouble(3));
                datos.add(e);
            }
        } catch (SQLException ex) {
            LOG.log(Level.SEVERE, null, ex);
        }
        return datos;


    }

    public boolean consultar(Evento evento) {

        String consulta = "SELECT * FROM evento"
                + " WHERE id_evento = '" + evento.getIdEvento() + "';";

        PreparedStatement ps =
                CONEXION.crearSentenciaPreparada(consulta);

        try {
            ResultSet rs = ps.executeQuery();

            if (rs.next()) {
                evento.setIdEvento(rs.getInt(1));
                evento.setNombre(rs.getString(2));
                evento.setCupo(rs.getInt(3));
                evento.setTipo(rs.getString(4));
                evento.setFecha_inicio(rs.getString(5));
                evento.setFecha_final(rs.getString(6));
                evento.setHora_inicio(rs.getString(7));
                evento.setHora_final(rs.getString(8));
                evento.setTema(rs.getString(9));
                evento.setPrecio(rs.getDouble(10));
                evento.setExpositor(rs.getString(11));
                evento.setPago_expositor(rs.getDouble(12));
                evento.setLugar(rs.getString(13));
                evento.setMaterial(rs.getString(14));
                evento.setEstado(rs.getString(15));
                return true;
            }
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }

    public ModeloTabla seleccionar() {
        String consulta = "SELECT * FROM evento";
        ArrayList<String> cols = new ArrayList<>();

        cols.add("Id evento");
        cols.add("Nombre");
        cols.add("Cupo");
        cols.add("Tipo");
        cols.add("F_Inicio");
        cols.add("F_Fin");
        cols.add("H_Inicio");
        cols.add("H_Fin");
        cols.add("Tema");
        cols.add("Precio");
        cols.add("Expositor");
        cols.add("P_Expositor");
        cols.add("Lugar");
        cols.add("Material");
        cols.add("Estado");

        ModeloTabla modelo = new ModeloTabla(consulta, cols, false);

        return modelo;

    }
}